iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Python

讓Python不拍勝-實用套件實作與介紹系列 第 28

[DAY28]Python自動化測試-Pytest(三)

  • 分享至 

  • xImage
  •  

上一篇和各位介紹了測試函數的編寫,以及測試成功的範例,那今天要介紹的是測試失敗的範例和更多測試的方式

測試失敗的範例

再測試前,我故意將add(2, 7)的結果設為10,我們來看一下會輸出什麼結果
image
可以看到輸出內容非常明確的提示了哪個函數出現錯誤,這時就可以依照錯誤訊息去做適當修正

傳入多組參數測試

@pytest.mark.parametrize 是 Pytest 提供的一個裝飾器,可以用來傳遞多組參數到測試函數,藉以避免太多重複的程式碼。

test_add() 測試函數來做示範

  • project_test.py
import project
import pytest

@pytest.mark.parametrize("a, b, return_", [
    (1, 2, 3),
    (3, 4, 7),
    (2, 6, 8),
    (2, 7, 9),
    (2, 8, 10),
])
def test_add(a, b, return_):
    assert project.add(a, b) == return_

def test_sub():
    assert project.sub(2, 6) == -4
    assert project.sub(2, 7) == -5

def test_mul():
    assert project.mul(2, 6) == 12
    assert project.mul(2, 7) == 14

def test_div():
    assert project.div(6, 2) == 3
    assert project.div(8, 2) == 4

def test_ironman():
    assert project.ironman(26) == "Share More Gain More: DAY26"
    assert project.ironman(27) == "Share More Gain More: DAY27"

執行測試

可以看到每一個參數都有成功傳入並測試成功
image

更多的常用裝飾器

@pytest.mark.skip

用來跳過測試,通常會在該函數尚未完成時使用。

  • project_test.py
import project
import pytest

@pytest.mark.parametrize("a, b, return_", [
    (1, 2, 3),
    (3, 4, 7),
    (2, 6, 8),
    (2, 7, 9),
    (2, 8, 10),
])
def test_add(a, b, return_):
    assert project.add(a, b) == return_
    
@pytest.mark.skip(reason="有Bug待修復")
def test_sub():
    assert project.sub(2, 6) == -4
    assert project.sub(2, 7) == -5

測試結果
可以看到測試test_sub()被跳過了,並且顯示理由
image

@pytest.mark.skipif

和上一個裝飾器功能類似,也是用來跳過測試,但是他是依照特定條件,若條件為真則跳過測試

下面範例透過設定一個旗標來強制跳過測試

  • project_test.py
import project
import pytest

@pytest.mark.parametrize("a, b, return_", [
    (1, 2, 3),
    (2, 7, 9),
    (2, 8, 10),
])
def test_add(a, b, return_):
    assert project.add(a, b) == return_

flag = 'skip'
@pytest.mark.skipif(flag == 'skip',reason="強制跳過測試")
def test_sub():
    assert project.sub(2, 6) == -4
    assert project.sub(2, 7) == -5

測試結果
可以看到條件達成後test_sub()成功被跳過了,並且顯示理由
image

下一篇將繼續介紹更多 Pytest 的使用方法和細節!


上一篇
[DAY27]Python自動化測試-Pytest(二)
下一篇
[DAY29]Python自動化測試-Pytest(四)
系列文
讓Python不拍勝-實用套件實作與介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言